Im Auftrag für Mathemas Ordinate werde ich hier eine Tips & Tricks Ecke pflegen.
ANFRAGEN, KOMMENTARE, ERGÄNZUNGEN ETC. JEDERZEIT WILLKOMMEN.
Zunächst einmal sammle ich kleine wiederverwendbare Programme die ich selber bei verschiedenen Projekten gebraucht habe.
Weiterhin finden sich weiter ausgebaute Beispiele z.B. für J/Link. Diese sind mit (TT), "Tips & Tricks", gekennzeichnet.
Manchmal findet man ein kleines erklärendes Beispiel das die Dokumentation von Standard Mathematica Functionen verbessert. Diese Abschnitte sind mit (Doku) markiert. Neuere Funktionen oder Symbole sind hier zum Teil auch beschrieben, gekennzeichnet durch (4.2).
Manchmal geht es auch nicht um eine Funktion sonder um eine Methode um etwas zu erreichen, z.B. deutsche Anführungsstriche.
In[2]:=
Out[2]=
Im Mathematica Kernel gibt es von Version zu Version Änderungen. Z.B. ist in Version 4.2 ZTransform Teil des Kernels.
In[3]:=
More... " hspace="55" width="418" height="15" align="absmiddle" />
In[57]:=
In[63]:=
Out[63]=
Chomp[string] eliminiert alle Leerzeichen, Tabulatorzeichen und Zeilenumbrüche am Anfang und am Ende eines Strings.
In[10]:=
In[14]:=
Out[14]//InputForm=
test
Seit Mathematica 4.2 gibt es eine neue boolsche Funtkion eingeführt, die testet ob ein Ausdruck Mitglied in einer bestimmten Zahlenmenge ist.
In[15]:=
Out[15]=
In[16]:=
Out[16]=
In[17]:=
Out[17]=
Bei Funktionen mit mehreren Optionen ist manchmal der Standardbefehl Options etwas unübersichtlich. OptionSettings gibt eine geordnete tabellarische Übersicht.
In[1]:=
OptionSettings[symb_, style_:"Output"] :=
StyleForm[
(* Grid ist ein undokumentierter GridBox-ähnlicher Befehl *)
Grid[
(Replace[#1,
(* wir wollen bei den Optionswerten sehen ob es ein String ist oder nicht, aber nicht das -> selber als String *)
{(a_ -> b_) -> {a, StyleForm["->", ShowStringCharacters -> False], b},
(a_ :> b_) -> {a, StyleForm[":>", ShowStringCharacters -> False], HoldForm[b]}}] & ) /@
Sort[Options[symb], OrderedQ[{#1[[1]], #2[[1]]}] & ],
RowLines -> True, GridFrame -> True, ColumnAlignments -> Left,
ColumnSpacings -> 3], style, ShowStringCharacters -> True] /; ValueQ[$FrontEnd] && Options[symb] =!= {};
In[19]:=
Out[19]//StyleForm=
Active | False | |
Background | Automatic | |
ButtonData | ||
ButtonEvaluator | None | |
ButtonExpandable | True | |
ButtonFrame | Palette | |
ButtonFunction | ||
ButtonMargins | 3.` | |
ButtonMinHeight | 1.` | |
ButtonNote | None | |
ButtonSource | Automatic | |
ButtonStyle | None |
In[20]:=
In[21]:=
In[24]:=
Out[24]//StyleForm=
AspectRatio | ||
Axes | Automatic | |
AxesLabel | None | |
AxesOrigin | Automatic | |
AxesStyle | Automatic | |
Background | Automatic | |
ColorOutput | Automatic | |
DefaultColor | Automatic | |
DefaultFont | ||
DisplayFunction | ||
Epilog | ||
FormatType | ||
Frame | False | |
FrameLabel | None | |
FrameStyle | Automatic | |
FrameTicks | Automatic | |
GridLines | None | |
ImageSize | Automatic | |
PlotJoined | False | |
PlotLabel | None | |
PlotRange | Automatic | |
PlotRegion | Automatic | |
PlotStyle | Automatic | |
Prolog | ||
RotateLabel | True | |
TextStyle | ||
Ticks | Automatic |
In[25]:=
Out[25]=
Ein weiterer neuer Operator ist \[InvisibleTimes]. Der folgende Ausdruck, 2\[InvisibleTimes]3 steht für das Produkt von 2 mal 3. Man sieht dies leicht durch Unformatieren der Zelle (mittels des "Show Expression" Menüs unter "Format").
In[26]:=
Out[26]=
In[27]:=
Out[27]//DisplayForm=
a | b |
c | ddd |
Grid aktzeptiert dieselben Optionen wie GridBox:
In[28]:=
Out[28]//StyleForm=
AllowScriptLevelChange | True | |
AutoDelete | True | |
ColumnAlignments | ||
ColumnLines | False | |
ColumnsEqual | False | |
ColumnSpacings | 0.800000011920929` | |
ColumnWidths | Automatic | |
GridBaseline | Axis | |
GridDefaultElement | ||
GridFrame | False | |
GridFrameMargins | ||
MultilineFunction | None | |
RowAlignments | Baseline | |
RowLines | False | |
RowMinHeight | 1.` | |
RowsEqual | False | |
RowSpacings | 1.` |
Hier ist eine Art J/Link-basierte OK-box, die einen oder zwei Zeilen Text in einer Dialog-Box anzeigt und wartet bis OK oder Cancel geclickt wird. Der Rückgabewert ist True oder False. Dieses kleine Beispiel kann zum Debuggen von FrontEnd Programmen benutzt werden, ganz ähnlich zu Dialog.
In[29]:=
Options[OKBox]=RGBColor->{{0.152941,0.796078,0.847059},{1,1,1}};
OKBox[a__,opts___?OptionQ]:=OKBox[StringJoin[ToString/@{a}],opts];
OKBox[text_String,opts___?OptionQ]:=OKBox[text,""];
OKBox[text_String,text2_String,opts___?OptionQ]:=
CompoundExpression[Needs["JLink`"];
ToExpression["JLink`InstallJava"][];
ToExpression["JLink`JavaBlock"][
Module[{frm,buttton,cancelbuttton,col,j,textField,windowListener,
butttonListener,okbuttton,panel,s1,s2,s3,s4,textLabel,textLabel2,
wasOKButton},{s1,s2,s3,s4}={200,200,700,200};
j=ToExpression[StringJoin["JLink`",#1]]&;
frm=j["JavaNew"]["com.wolfram.jlink.MathJFrame"];
col=(N[RGBColor/.{opts}/.Options[OKBox]]);
panel=j["JavaNew"]["javax.swing.JPanel"];
panel@setLayout[Null];
textLabel=j["JavaNew"]["javax.swing.JLabel",text];
textLabel2=j["JavaNew"]["javax.swing.JLabel",text2];
textLabel@setBounds[15,15,s3-50,50];
textLabel2@setBounds[15,40,s3-50,50];
okbuttton=j["JavaNew"]["javax.swing.JButton","OK"];
okbuttton@setBounds[25,s2-90,60,40];
cancelbuttton=j["JavaNew"]["javax.swing.JButton","Cancel"];
cancelbuttton@setBounds[s3-120,s2-90,80,40];
panel@add[okbuttton];
panel@add[cancelbuttton];
panel@add[textLabel];panel@add[textLabel2];
okbuttton@
addActionListener[
j["JavaNew"]["com.wolfram.jlink.MathActionListener",
"(EndModal[]; True)&"]];
cancelbuttton@
addActionListener[
j["JavaNew"]["com.wolfram.jlink.MathActionListener",
"(EndModal[]; False)&"]];
frm@getContentPane[]@add[panel];
frm@setSize[s3,s4];
okbuttton@
setBackground[j["JavaNew"]["java.awt.Color",Sequence@@col[[1]]]];
cancelbuttton@
setBackground[j["JavaNew"]["java.awt.Color",Sequence@@col[[2]]]];
okbuttton@setSelected[True];
j["JavaShow"][frm];
wasOKButton=j["DoModal"][];frm@dispose[];
If[TrueQ[wasOKButton],True,False]]]];
In[33]:=
Out[33]//TableForm=
a | bbbb |
c | d |
In[34]:=
In[35]:=
Out[35]=
In[36]:=
In[37]:=
In[38]:=
Out[38]=
In[39]:=
Out[39]//InputForm=
a bbbb\nc d\n
Die beiden buttons unten sind wie folgt zu gebrauchen: Man selektiere ein mit englischen Hochkommas geschriebene Wort (oder eine ganze Textpassage), inklusive der Hochkommas. Durch Klicken auf den Button werden nun die englischen Hochkommas in deutsche verwandelt. Die Abstände sind so optimiert dass es ausgedruckt gut aussieht. Natürlich ist dieser workaround“ nicht perfekt.
In[40]:=
In[41]:=
siehe Beispiel OKBox unter FrontEnd
ImportURL ist ähnlich zur GetURL Funktion aus der J/Link Dokumentation und lädt einen Text direkt vom Internet als String.
ImportRemoteNB öffnet Mathematica notebooks direkt.
In[42]:=
Needs["JLink`"];Off[General::spell1];
ImportURL::usage="ImportURL[URL] lädt die URL als string direkt in Mathematica, ohne temporäre Zwischenablagen auf der Festplatte. Die URL sollte entweder im Text Format oder im gzip Format sein.";
ImportRemoteNB::usage="ImportRemoteNB[URL] importiert die URL als Mathematica notebook.";
ImportURL[url_String] := JavaBlock[
Module[{u, s = "", stream, numRead, buf},
(* InstallJava[] lädt die Java Run Time *)
InstallJava[];
(* Hier wird die java.net.URL Klasse geladen *)
u = JavaNew["java.net.URL", url];
(* Der stream zur URL wird hergestellt mittels der java.net.URL Methode openStream *)
stream = u@openStream[];
If[StringMatchQ[url, "*.gz"],
stream=JavaNew["java.util.zip.GZIPInputStream",stream]];
(* Fehlerbedingung *)
If[stream === $Failed, Return[$Failed]];
(* Die Verbindung steht und jetzt wird per buffer jeder Character eingelesen *)
buf = JavaNew["[B", 5000];
While[(numRead = stream[read[buf]]) > 0,
s = s <> FromCharacterCode[(If[#1 < 0, #1 + 256, #1] & ) /@ Take[Val[buf], numRead]]];
stream[close[]]; s]];
ImportRemoteNB[nb_String] := NotebookPut[Import[StringToStream[ImportURL[nb]], "NB"]]
In[48]:=
Out[48]=
In[49]:=
Out[49]=
In[50]:=
In[51]:=
In[52]:=
JavaInput::usage="JavaInput[titeltext, defaultinput]";
JavaInput[title_String, pwd_String] :=
Module[{jC},Needs["JLink`"];
jC[s_String] := ToExpression[StringJoin["JLink`", s]];
jC["InstallJava"][];
jC["JavaBlock"][
Module[{frm, buton, textField, butonListener, okbuton, cancelbuton, w, h,
t}, frm = jC["JavaNew"]["com.wolfram.jlink.MathJFrame"];
w = 350; h = w/GoldenRatio // N // Round;
t = 150; cornerleft = 50; {okx, oky, cancelx} = {60, 40, 80};
panel = jC["JavaNew"]["javax.swing.JPanel"];
panel@setLayout[Null];
titleLabel = jC["JavaNew"]["javax.swing.JLabel", title];
titleLabel@setBounds[85, 20, 2t, 25];
okbuton = jC["JavaNew"]["javax.swing.JButton", "OK"];
okbuton@setBounds[cornerleft, h - (cornerleft + okx), okx, oky];
cancelbuton = jC["JavaNew"]["javax.swing.JButton", "Cancel"];
cancelbuton@
setBounds[w - cornerleft - cancelx, h - (cornerleft + okx), cancelx,
oky];
textField = jC["JavaNew"]["javax.swing.JTextField", pwd, 20];
textField@setBounds[Round[w/2 - t/2], 50, Round[0.8 t], 25];
panel@add[textField];
panel@add[okbuton];
panel@add[cancelbuton];
panel@add[titleLabel];
okbuton@
addActionListener[
jC["JavaNew"]["com.wolfram.jlink.MathActionListener",
"(EndModal[]; True)&"]];
cancelbuton@
addActionListener[
jC["JavaNew"]["com.wolfram.jlink.MathActionListener",
"(EndModal[]; False)&"]];
frm@getContentPane[]@add[panel];
frm@setSize[w, h];
jC["JavaShow"][frm];
frm@setModal[];
wasOKButton = jC["DoModal"][]; frm@dispose[];
If[TrueQ[wasOKButton], passwd = textField@getText[], passwd = $Failed]
]]];
In[54]:=
Out[54]//InputForm=
Voreinstellung
Leider ist das neue Combinatorica Paket nicht gut dokumentiert und nicht kompatibel mit frühreren Versionen.
Hier ein kleiner Fix für ShowGraph der für das Buchs "Diskrete Mathematik - Basiswissen für Informatiker"
In[55]:=
In[56]:=
Converted by Mathematica (March 11, 2003)